package br.com.fatecmc.persephone.entrevista.core.dao.impl;

import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.logging.Level;
import java.util.logging.Logger;

import br.com.fatecmc.core.dao.AbstractDAO;
import br.com.fatecmc.fatec.domain.Entidade;
import br.com.fatecmc.persephone.entrevista.domain.Entrevista;
import br.com.fatecmc.persephone.propriedade.domain.Propriedade;
import br.com.fatecmc.propriedade.core.dao.impl.DAOPropriedade;

public class DAOEntrevista extends AbstractDAO {

	@Override
	public void salvar(Entidade obj) throws IllegalArgumentException {
		try {
            Entrevista e = (Entrevista) obj;
            conexao.getConexao().createStatement(); 
            String sql =  "INSERT INTO tb_entrevistas (" +
            		"id_propriedade, " +
            		"nome_operador, " +
            		"nome_entrevistado" +
            		") " +
            		"VALUES(?,?,?)";
            PreparedStatement pstm = conexao.getConexao().prepareStatement(sql);
            pstm.setInt(1, e.getPropriedade().getId());
            pstm.setString(2, e.getNomeOperador());
            pstm.setString(3, e.getNomeEntrevistado());
            pstm.executeUpdate();
            conexao.getConexao().close();
            pstm.close();
        } catch (SQLException ex) {
            Logger.getLogger(DAOEntrevista.class.getName()).log(Level.SEVERE, null, ex);
        }				
	}

	@Override
	public Entidade alterar(Entidade obj) {
		try {
            Entrevista e = (Entrevista) obj;
            conexao.getConexao().createStatement(); 
            String sql =  "UPDATE tb_entrevistas SET" +
            		"id_propriedade=?, " +
            		"nome_operador=?, " +
            		"nome_entrevistado=?";
            PreparedStatement pstm = conexao.getConexao().prepareStatement(sql);
            pstm.setInt(1, e.getPropriedade().getId());
            pstm.setString(2, e.getNomeOperador());
            pstm.setString(3, e.getNomeEntrevistado());
            pstm.executeUpdate();
            conexao.getConexao().close();
            pstm.close();
        } catch (SQLException ex) {
            Logger.getLogger(DAOEntrevista.class.getName()).log(Level.SEVERE, null, ex);
        }
		return obj;
	}

	@Override
	public boolean excluir(Entidade obj) {
		try {
            Entrevista e = (Entrevista) obj;
            conexao.getConexao().createStatement(); 
            String sql =  "DELETE FROM tb_entrevistas WHERE id_propriedade=?";
            PreparedStatement pstm = conexao.getConexao().prepareStatement(sql);
            pstm.setInt(1, e.getPropriedade().getId());
            pstm.executeUpdate();
            conexao.getConexao().close();
            pstm.close();
            return true;
        } catch (SQLException ex) {
            Logger.getLogger(DAOEntrevista.class.getName()).log(Level.SEVERE, null, ex);
            return false;
        }
	}

	@Override
	public Collection consultar(Entidade obj) {
        ArrayList<Entrevista> lista = new ArrayList<Entrevista>();

		try {
            Entrevista e = (Entrevista) obj;
            conexao.getConexao().createStatement(); 
            String sql =  "SELECT * FROM tb_entrevistas WHERE id_propriedade = ?";
            PreparedStatement pstm = conexao.getConexao().prepareStatement(sql);
            pstm.setInt(1, e.getPropriedade().getId());
            pstm.setString(2, e.getNomeOperador());
            pstm.setString(3, e.getNomeEntrevistado());
            ResultSet rs = pstm.executeQuery();
            
            while(rs.next()){
            	Entrevista ent = new Entrevista();
            	ent.setNomeEntrevistado(rs.getString("nome_entrevistado"));
            	ent.setNomeOperador(rs.getString("nome_operador"));
            	ent.setData(rs.getDate("data"));
            	DAOPropriedade pdao = new DAOPropriedade();
            	Propriedade p = new Propriedade();
            	p.setId(rs.getInt("id_propriedade"));
            	p = (Propriedade) pdao.consultar(p);
            	ent.setPropriedade(p);
            	lista.add(e);
            }
            
            conexao.getConexao().close();
            pstm.close();
        } catch (SQLException ex) {
            Logger.getLogger(DAOEntrevista.class.getName()).log(Level.SEVERE, null, ex);
        }
		return lista;
	}
}
